iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0

大家好,鐵人賽堂堂邁入第十八天!

在過去幾天,我們深度體驗了 adk-mcp 這個功能全面、整合度高的「應用開發套件」。今天,我們將換上另一套裝備fast-mcp 框架。

fast-mcp 的設計理念更接近現代的 Python Web 框架 (如 FastAPI),它輕量、快速,並給予開發者更多的控制權。今天,我們就來從零開始,用 fast-mcp 搭建一個最經典的 "Hello, World!" 級別的 MCP 應用。


一、準備 fast-mcp 開發環境

我們同樣從一個乾淨的虛擬環境開始。

1. 建立並啟用虛擬環境

打開終端機,進入你的專案資料夾,並執行:

python -m venv venv
source ./venv/bin/activate

2. 安裝 fast-mcp

fast-mcp 官方推薦使用 uv 這個 Rust 編寫的高速 Python 套件管理器來安裝,速度飛快。

# 先安裝 uv
pip install uv
# 再用 uv 來安裝 fastmcp
uv pip install fastmcp

小提示: 如果你不想額外安裝 uv,直接使用 pip install fastmcp 也是完全可以的。

3. 驗證安裝

安裝完成後,可以執行以下指令來確認 fast-mcp 的 CLI (命令列工具) 是否可用:

fastmcp version

如下圖:
截圖 2025-09-19 晚上7.07.35


二、編寫 fast-mcp 伺服器 (my_server.py)

fast-mcp 定義工具的方式非常優雅,採用了裝飾器 (Decorator) 的語法,這對於熟悉 FastAPI 或 Flask 的開發者來說會倍感親切。

建立一個名為 my_server.py 的檔案,並貼上以下程式碼:

from fastmcp import FastMCP

# 1. 初始化一個 FastMCP 應用
mcp = FastMCP("My First FastMCP Server")

# 2. 使用 @mcp.tool 裝飾器來註冊一個工具
@mcp.tool
def greet(name: str) -> str:
    """A simple tool that returns a greeting."""
    return f"Hello, {name}!"

# 3. (可選) 直接執行此檔案時的啟動方式
if __name__ == "__main__":
    # 但我們更推薦使用 fastmcp CLI 來啟動
    mcp.run(transport="http", port=8005)

程式碼解析

  • mcp = FastMCP(...): 建立一個 FastMCP 應用實例。
  • @mcp.tool: 這是 fast-mcp 的精髓!任何被這個裝飾器標記的 Python 函式,都會被自動註冊成一個可供遠端呼叫的 MCP 工具。

三、編寫 fast-mcp 客戶端 (my_client.py)

接著,我們來編寫一個客戶端,用來呼叫剛剛建立的 greet 工具。

建立一個名為 my_client.py 的檔案,並貼上以下程式碼:

import asyncio
from fastmcp import Client

# 注意:這裡的 port 號需要與你啟動伺服器時的 port 一致
# 我們稍後會用 8000 port 來啟動伺服器,所以先設定為 8000
client = Client("http://localhost:8000/mcp")

async def call_tool(name: str):
    # 使用 async with 來優雅地管理連線
    async with client:
        # 呼叫名為 "greet" 的工具,並傳遞參數
        result = await client.call_tool("greet", {"name": name})
        print(" 成功收到來自 Server 的回應:")
        print(result)

# 執行非同步主程式
if __name__ == "__main__":
    asyncio.run(call_tool("FastMCP"))

程式碼解析

  • client = Client(...): 建立一個客戶端實例,指向伺服器的 /mcp 端點。
  • async with client:: fast-mcp 的客戶端同樣是非同步的,使用 async with 可以自動處理連線的建立與關閉。
  • await client.call_tool(...): 這是客戶端的核心方法,用來執行遠端的工具。第一個參數是工具名稱,第二個參數是包含所有參數的字典。

四、啟動!伺服器與客戶端的第一次對話

第一步:啟動伺服器

  • 開啟一個終端機,啟用虛擬環境,然後執行 fast-mcp 的 CLI 指令來啟動我們的伺服器:
fastmcp run my_server.py:mcp --transport http --port 8000

重點提示: 我們在這裡使用了 --port 8000。這個命令列參數會覆寫你在 my_server.py 中寫的 port=8005。這意味著我們的伺服器現在運行在 8000 埠口上。這也是為什麼我們在 my_client.py 中將 URL 設定為 8000 的原因。

截圖 2025-09-19 晚上7.14.33

第二步:執行客戶端

  • 另外開啟一個新的終端機,同樣啟用虛擬環境。
  • 執行我們的客戶端腳本:
python my_client.py

成果驗收
如果一切順利,你將會在客戶端的終端機看到:

截圖 2025-09-19 晚上7.12.42

同時,在伺服器的終端機,你會看到一條類似以下的日誌,記錄了這次成功的請求:

截圖 2025-09-19 晚上7.13.37


五、今日總結

恭喜你!今天我們成功地用 fast-mcp 搭建並運行了第一個 Client-Server 應用。

我們初步體驗了 fast-mcp 的設計哲學:

  • 輕量直觀: 採用了類似 FastAPI 的裝飾器語法,學習曲線平緩。
  • 專注核心: 它更專注於 MCP 協議本身的實現,提供了一套簡潔的伺服器與客戶端工具,而不是像 adk-mcp 那樣提供包含 Agent 和 Web UI 的完整應用框架。
  • CLI 驅動: 透過 fastmcp run 等指令來管理應用,符合現代 Python 開發的習慣。

我們現在對 adk-mcpfast-mcp 都有了初步的認識。明天,我們將深入 fast-mcp 的進階功能,學習如何讓我們的工具執行非同步 I/O 操作,這是在真實世界中打造高效能服務的關鍵一步!


上一篇
Day 17 - 部署自己的工具到雲端並在OpenWebUI上使用
下一篇
Day 19 - 使用 FastMCP 打造天氣查詢工具 weather server
系列文
三十天解鎖上下文超能力:MCP 實戰21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言